/-app ...
/-app/layout
/-app/tree
Application.ts
earlyinit.js
format.ts
lateinit.js
sampleData.d.ts
sampleData.js
/-core
Long.ts
async.ts
format.ts
/-headers
/-headers/enums
AddressRange.ts
DosHeader.ts
OptionalHeader.ts
PEFileHeaders.ts
PEHeader.ts
SectionHeader.ts
/-imports
/-io
/-managed
/-managed/metadata
/-managed/tables
AppDomain.ts
Assembly.ts
ConstructedGenericType.ts
EventInfo.ts
FieldInfo.ts
MethodInfo.ts
ParameterInfo.ts
PropertyInfo.ts
Type.ts
TypeReference.ts
/-typings
/-unmanaged
pe.html
pe.ts
57
        this._openFileInWindow(filename, arrayBuffer);
58
        return;
59
      }
60
 
61
      this.title(filename);
62
 
63
      try {
64
        var reader = new io.BufferReader(arrayBuffer);
65
        var pefileheaders = new headers.PEFileHeaders();
66
        pefileheaders.read(reader);
67
      }
68
      catch (loadError) {
69
        alert('load: ' + loadError.message + ' ' + loadError.stack);
70
      }
71
 
72
      setTimeout(() => {
73
        try {
74
 
75
          this._clearContent();
76
          this.peFileHeaders(pefileheaders);
77
 
78
          ko.renderTemplate('app', this, null, this._host);
79
 
80
          setTimeout(() => {
81
            try {
82
              this._loadManaged(arrayBuffer, reader);
83
            }
84
            catch (asmLoadError) {
85
              alert('asm load: '+asmLoadError.message+' '+asmLoadError.stack);
86
            }
87
          }, 100);
88
        }
89
        catch (renderError) {
90
          alert('render: ' + renderError.message + ' ' + renderError.stack);
91
        }
92
      }, 100);
93
    }
94
 
95
    private _loadManaged(arrayBuffer: ArrayBuffer, reader: io.BufferReader) {
96
      var dom = new managed.AppDomain();
97
 
98
      var nextYield = Date.now() + 100;
99
      var progress = (current, total) => {
100
        var now = Date.now();
101
        if (now < nextYield) return null;
102
 
103
        nextYield = now + 100;
104
        return (callback) => setTimeout(callback, 10);
105
      };
106
 
107
      var async = (error, asm) => {
108
        if (error) { 
109
          alert(error.message + ' ' + error.stack);
110
          return;
111
        }
112
 
113
        var asmNode = new AssemblyNode(asm);
114
 
115
        this.managed(asmNode);
116
      };
117
      (<any>async).progress = progress;
118
 
119
      dom.read(reader, <any>async);
120
    }
121
 
122
    private _openFileInWindow(filename: string, arrayBuffer: ArrayBuffer) {
123
      alert('open file in window');
124
    }
125
 
126
    private _clearContent() {
127
      if ('innerHTML' in this._host) this._host.innerHTML = '';
128
      else if ('textContent' in this._host) this._host.textContent = '';
129
    }
130
  }
131
}